package 备战春招12月27日开始刷题.牛客网的题目;
// https://www.nowcoder.com/practice/8ae05c2913fe438b8b14f3968f64fc0b?tpId=188&&tqId=38616&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking
public class simpleNC106三个数的最大乘积1228 {
    /**
     * 最大乘积
     * @param A int整型一维数组
     * @return long长整型
     */
    public long solve (int[] A) {
        // write code here
        // 最大的第二大的和第三大的
        int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE;
        //最小的和第二小的（负数的时候要用）
        int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;
        for(int i = 0;i < A.length;i ++){
            if(A[i] < min1){//更新最小值
                min2 = min1;
                min1 = A[i];
            }else if(A[i] < min2){//更新第二小
                min2 = A[i];
            }
            if (A[i] > max1){//更新最大值
                max3 = max2;
                max2 = max1;
                max1 = A[i];
            }else if(A[i] > max2){//更新第二大
                max3 = max2;
                max2 = A[i];
            }else if(A[i] > max3){//更新第三大
                max3 = A[i];
            }
        }
        return Math.max((long)min1 * min2 * max1,(long) max1 * max2 * max3);
    }

    public static void main(String[] args) {
        System.out.println(new simpleNC106三个数的最大乘积1228().solve(new int[]{3, 4, 1, 2}));

    }
}
